#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 58 $
# $Author: rchiganov@gmail.com $
# $Date: 2013-12-14 19:10:32 +0000 (Sat, 14 Dec 2013) $

#---------------------------------------------------------------------------------------------------

# Initial Copyright © 2008 Als <Als@exploit.in>

#---------------------------------------------------------------------------------------------------

import xmpp

#---------------------------------------------------------------------------------------------------

invite_pending=[]
SUPER_INV = []

def handler_invite_start(type, source, parameters):

	lparam = parameters.split()
	if lparam[0] == u'всех':
		handler_inv_list(type, source, parameters)
		return

	truejid,nick,reason='','',''
	if not parameters:
		reply(type,source,u'Может ты мне ник или жид все-таки напишешь?')
		return
	if not parameters.count('@'):
		nicks = GROUPCHATS[source[1]].keys()
		nick=parameters.split()[0]
		if not nick in nicks:
			reply(type,source,u'ты уверен, что <'+nick+u'> был тут?')
			return
		else:
			truejid=get_true_jid(source[1]+'/'+nick)
			reason=' '.join(parameters.split()[1:])
	else:
		truejid=parameters

	for luser in GROUPCHATS[source[1]].keys():
		if GROUPCHATS[source[1]][luser]['jid'].count(truejid) and GROUPCHATS[source[1]][luser]['ishere'] == 1:
			reply(type, source, u'а он тут *PARDON*')
			return

	msg=xmpp.Message(to=source[1])
	id = 'inv'+str(random.randrange(1, 1000))
	globals()['invite_pending'].append(id)
	msg.setID(id)
	x=xmpp.Node('x')
	x.setNamespace('http://jabber.org/protocol/muc#user')
	inv=x.addChild('invite', {'to':truejid})
	if reason:
		inv.setTagData('reason', reason)
	else:
		inv.setTagData('reason', u'Привет, тебя тут всегда рады видеть!\nТебя приглашает '+source[2])
	msg.addChild(node=x)
	JCON.send(msg)

def handler_invite_answ(coze, res, type, source):
	id = res.getID()
	if id in globals()['ping_pending']:
		globals()['ping_pending'].remove(id)
	else:
		print 'someone is doing wrong...'
		return
	if res:
		for p in [x.getTag('decline') for x in res.getTags('x')]:
			if p!= None:
				reason=p.getTagData('reason')
				if reason:
					reply(type, source, u'юзер не захотел заходить сюда: '+reason)
				else:
					reply(type, source, u'юзер не захотел заходить сюда')

#---------------------------------------------------------------------------------------------------

def handler_inv_list(type, source, body):
	if source[1] in GROUPCHATS.keys():
		lparam = body.split()
		reason = u'Пожалуйста, зайдите в комнату!'
		if len(lparam) == 1:
			lparam.append(u'мембер')
		body = lparam[1].lower()
		if body.count(u'овнер') or body.count('owner'):
			afl = 'owner'
		elif body.count(u'админ') or body.count('admin'):
			afl = 'admin'
		elif body.count(u'мембер') or body.count('member'):
			afl = 'member'
		else:
			afl = 'member'
		iq = xmpp.Iq('get')
		id ='list_'+str(random.randrange(1, 1000))
		SUPER_INV.append(id)
		iq.setTo(source[1])
		iq.setID(id)
		query = xmpp.Node('query')
		query.setNamespace('http://jabber.org/protocol/muc#admin')
		query.addChild('item', {'affiliation': afl})
		iq.addChild(node = query)
		JCON.SendAndCallForResponse(iq, handler_inv_answ, {'type': type, 'source': source, 'afl': afl, 'reason': reason})
	else:
		reply(type, source, u'ты не в чате')

def invite_start(conf, jid, reason):
	msg = xmpp.Message(to = conf)
	id = 'inv_'+str(random.randrange(1, 1000))
	msg.setID(id)
	x = xmpp.Node('x')
	x.setNamespace('http://jabber.org/protocol/muc#user')
	inv = x.addChild('invite', {'to': jid})
	inv.setTagData('reason', reason)
	msg.addChild(node = x)
	JCON.send(msg)

def handler_inv_answ(coze, res, type, source, afl, reason):
	id = res.getID()
	if id in SUPER_INV:
		SUPER_INV.remove(id)
		if res:
			if res.getType() == 'result':
				props = res.getChildren()[0].getChildren()
				for item in props:
					if item != 'None':
						jid = item.getAttrs()['jid']
						print jid
						if jid.count('@'):
							invite_start(source[1], jid, reason)
				reply(type, source, u'Позвала всех, кто там был!')
			else:
				reply(type, source, u'аблом')
		else:
			reply(type, source, u'что-то не вышло')
	else:
		reply(type, source, u'не получилось')

#---------------------------------------------------------------------------------------------------

register_command_handler(handler_invite_start, 'призвать', [ 'мук', 'все' ], 20, 'Приглашет заданного пользователя или всех пользователей из указанной группы (админов, овнеров, мемберов) в конференцию.', 'призвать <ник/JID | всех> [группа | причина]', [ 'призвать guy', 'призвать guy@jabber.aq', 'призвать guy@jabber.aq есть дело', 'призвать всех овнеров', 'призвать всех мемберов', 'призвать всех админов' ])

#---------------------------------------------------------------------------------------------------